﻿Imports System.Data
Imports MetodosComuns
Imports extranet.BC
Imports extranet.BE
Imports extranet.DA
Imports System.Collections.Generic

Partial Class cadastrarCurriculoCandidato
  Inherits System.Web.UI.Page

  Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
    '==================       PROCEDIMENTO  PADRÃO  SEGURANÇA     =============================
    Dim objBESeguranca As BESeguranca
    Dim objBEUsuario As BEUsuario = Session("objBEUsuario")
    If IsNothing(objBEUsuario) Then Response.Redirect(TELA_LOGOUT)
    Session("strTela") = MetodosComuns.GetCurrentPageName()
    If Not IsPostBack Then          ' SEGURANÇA
      objBESeguranca = BCSeguranca.SelecionaPermissoes(objBEUsuario.GrupoAcesso, Session("strTela"))
      If Not objBESeguranca.Autorizado Then Response.Redirect(TELA_LOGOUT)
      Session("objBESeguranca") = objBESeguranca
    Else
      objBESeguranca = Session("objBESeguranca")
    End If

    '==================       ALTERAR SE FOR NECESSARIO          ===============================
    If Not IsPostBack Then
      Dim objBECandidato As New BECandidato(DirectCast(Session("objBEUsuario"), BECandidato).Id)
      objBECandidato = BCCandidato.SelecionaCandidato(objBECandidato.Id)
      ListarVagas(objBECandidato)
      preencherFormularioPagina(objBECandidato)
    End If
  End Sub

  Private Sub ListarVagas(ByVal objBECandidato As BECandidato)
    If objBECandidato.VagasAssociadas IsNot Nothing Then
      grvVagas.DataSource = objBECandidato.VagasAssociadas
      grvVagas.DataBind()
      pnl_ListaVagas.Visible = (objBECandidato.VagasAssociadas.Count() > 0)
    End If
  End Sub

  Private Sub preencherFormularioPagina(ByVal objBECandidato As BECandidato)
    ddl_Escolaridade.DataSource = System.Enum.GetNames(GetType(GrauEscolaridade))
    ddl_Escolaridade.DataBind()
    ddl_Ano.DataSource = System.Enum.GetNames(GetType(AnoDoCurso))
    ddl_Ano.DataBind()
    ddl_Alemao.DataSource = System.Enum.GetNames(GetType(NivelIdioma))
    ddl_Alemao.DataBind()
    ddl_Espanhol.DataSource = System.Enum.GetNames(GetType(NivelIdioma))
    ddl_Espanhol.DataBind()
    ddl_Frances.DataSource = System.Enum.GetNames(GetType(NivelIdioma))
    ddl_Frances.DataBind()
    ddl_Ingles.DataSource = System.Enum.GetNames(GetType(NivelIdioma))
    ddl_Ingles.DataBind()
    ddl_Italiano.DataSource = System.Enum.GetNames(GetType(NivelIdioma))
    ddl_Italiano.DataBind()

    With objBECandidato
      txt_Cpf.Text = .Cpf
      txt_Ddd.Text = .Ddd
      txt_Email.Text = .Email
      txt_Endereco.Text = .Endereco
      txt_Login.Text = .Login
      txt_Nome.Text = .Nome
      txt_Ramal.Text = .Ramal
      txt_Rg.Text = .Rg
      txt_Senha.Attributes.Add("value", .Senha)
      txt_Senha2.Attributes.Add("value", .Senha)
      txt_TelefoneCelular.Text = .TelefoneCelular
      txt_TelefoneResidencial.Text = .TelefoneResidencial
      txt_Cep.Text = .Cep
      txt_Cidade.Text = .Cidade

      If Not .DataNascimento = Date.MinValue Then
        txt_DataNascimento.Text = .DataNascimento.ToString("dd/MM/yyyy")
      End If
      txt_Estado.Text = .Estado
      txt_Login.Text = .Login
      rbl_Sexo.SelectedValue = .Sexo
      rbl_PossuiFilhos.SelectedValue = .PossuiFilhos
      rbl_PortadorDeficiencia.SelectedValue = .PortadorDeficiencia
      txt_Nacionalidade.Text = .Nacionalidade

      If Not .Curriculo Is Nothing Then
        If Not .Curriculo.FormacoesEscolares Is Nothing AndAlso _
          .Curriculo.FormacoesEscolares.Count > 0 Then
          With .Curriculo.FormacoesEscolares.Item(0)
            ddl_Escolaridade.SelectedIndex = .Escolaridade
            ddl_Ano.SelectedIndex = .Ano
            If Not .DataInicio = Date.MinValue Then
              txt_cal_inicio.Text = .DataInicio.ToString("dd/MM/yyyy")
            End If
            If Not .DataFim = Date.MinValue Then
              txt_cal_fim.Text = .DataFim.ToString("dd/MM/yyyy")
            End If
            txt_instituicao_curso.Text = .NomeInstituicao
            txt_curso.Text = .Curso
            txt_formacao_escolar.Value = .Id
          End With
        End If
        If Not .Curriculo.ExperienciasProfessionais Is Nothing AndAlso _
          .Curriculo.ExperienciasProfessionais.Count > 0 Then
          With .Curriculo.ExperienciasProfessionais.Item(0)
            If Not .DataEntrada = Date.MinValue Then
              txt_cal_data_entrada.Text = .DataEntrada.ToString("dd/MM/yyyy")
            End If
            If Not .DataSaida = Date.MinValue Then
              txt_cal_data_saida.Text = .DataSaida.ToString("dd/MM/yyyy")
            End If
            chb_emprego_atual.Checked = .EmpregoAtual
            txt_nome_empresa.Text = .NomeDaEmpresa
            txt_id_exp_prof.Value = .Id
            txt_ultimo_cargo.Text = .Cargo
            txt_atribuicoes_cargo.Text = .AtribuicoesDoCargo
          End With
        End If
        If .Curriculo.Idiomas IsNot Nothing AndAlso _
           .Curriculo.Idiomas.Count > 0 Then
          For Each objIdioma As Idioma In .Curriculo.Idiomas
            Select Case objIdioma.Id
              Case 1
                ddl_Alemao.SelectedIndex = objIdioma.Nivel
              Case 2
                ddl_Espanhol.SelectedIndex = objIdioma.Nivel
              Case 3
                ddl_Frances.SelectedIndex = objIdioma.Nivel
              Case 4
                ddl_Ingles.SelectedIndex = objIdioma.Nivel
              Case 5
                ddl_Italiano.SelectedIndex = objIdioma.Nivel
            End Select
          Next
        End If
      End If
    End With
  End Sub

  Protected Sub btnAtualizar_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnAtualizar.Click
    Try
      Dim objBECandidato As New BECandidato(DirectCast(Session("objBEUsuario"), BECandidato).Id)
      objBECandidato.Curriculo = New Curriculo()
      objBECandidato.Curriculo.FormacoesEscolares = New List(Of FormacaoEscolar)
      objBECandidato.Curriculo.ExperienciasProfessionais = New List(Of ExperienciaProfissional)
      objBECandidato.Curriculo.Idiomas = New List(Of Idioma)


      lblErro.Visible = False
      If Not BCCandidato.CpfExiste(txt_Cpf.Text) Then
        lblErro.Visible = True
        lblErro.Text = "Você não pode alterar seu CPF no Sistema"
      ElseIf Not BCCandidato.LoginExiste(txt_Login.Text) Then
        lblErro.Visible = True
        lblErro.Text = "Você não pode alterar o seu login no Sistema"
      ElseIf Not txt_Senha.Text.Equals(txt_Senha2.Text) Then
        lblErro.Visible = True
        lblErro.Text = "As senhas digitadas não são iguais"
      Else
        objBECandidato.Cpf = txt_Cpf.Text
        objBECandidato.Cep = txt_Cep.Text
        objBECandidato.Cidade = txt_Cidade.Text
        Dim aDate As Array = txt_DataNascimento.Text.Split("/")
        objBECandidato.DataNascimento = New Date(Convert.ToInt32(aDate(2)), _
                                            Convert.ToInt32(aDate(1)), _
                                            Convert.ToInt32(aDate(0)))
        objBECandidato.Ddd = txt_Ddd.Text
        objBECandidato.Email = txt_Email.Text
        objBECandidato.Endereco = txt_Endereco.Text
        objBECandidato.Estado = txt_Estado.Text

        objBECandidato.Login = txt_Login.Text
        objBECandidato.Nacionalidade = txt_Nacionalidade.Text
        objBECandidato.Nome = txt_Nome.Text
        objBECandidato.PortadorDeficiencia = rbl_PortadorDeficiencia.SelectedValue
        objBECandidato.Pais = "Brasil"

        objBECandidato.PossuiFilhos = rbl_PossuiFilhos.SelectedValue
        objBECandidato.Ramal = txt_Ramal.Text
        objBECandidato.Rg = txt_Rg.Text
        objBECandidato.Senha = txt_Senha.Text

        objBECandidato.Sexo = rbl_Sexo.SelectedValue
        objBECandidato.TelefoneCelular = txt_TelefoneCelular.Text
        objBECandidato.TelefoneResidencial = txt_TelefoneResidencial.Text

        ' Formacao Escolar
        Dim formacaoEscolar As New FormacaoEscolar()
        formacaoEscolar.Escolaridade = ddl_Escolaridade.SelectedIndex
        aDate = txt_cal_inicio.Text.Split("/")
        formacaoEscolar.DataInicio = New Date(Convert.ToInt32(aDate(2)), _
                                          Convert.ToInt32(aDate(1)), _
                                          Convert.ToInt32(aDate(0)))
        aDate = txt_cal_fim.Text.Split("/")
        formacaoEscolar.DataFim = New Date(Convert.ToInt32(aDate(2)), _
                                          Convert.ToInt32(aDate(1)), _
                                          Convert.ToInt32(aDate(0)))
        formacaoEscolar.Curso = txt_curso.Text
        formacaoEscolar.NomeInstituicao = txt_instituicao_curso.Text
        formacaoEscolar.Ano = ddl_Ano.SelectedIndex
        If txt_formacao_escolar.Value.Length > 0 Then
          formacaoEscolar.Id = Integer.Parse(txt_formacao_escolar.Value)
        Else
          formacaoEscolar.Id = -1
        End If
        objBECandidato.Curriculo.FormacoesEscolares.Add(formacaoEscolar)

        ' Experiencia Profissional 
        Dim expProf As New ExperienciaProfissional()
        expProf.AtribuicoesDoCargo = txt_atribuicoes_cargo.Text
        expProf.Cargo = txt_ultimo_cargo.Text
        If txt_id_exp_prof.Value.Length > 0 Then
          expProf.Id = Integer.Parse(txt_id_exp_prof.Value)
        Else
          expProf.Id = -1
        End If
        expProf.NomeDaEmpresa = txt_nome_empresa.Text
        expProf.EmpregoAtual = chb_emprego_atual.Checked
        If Not txt_cal_data_entrada.Text().Trim() = "" Then
          aDate = txt_cal_data_entrada.Text.Split("/")
          expProf.DataEntrada = New Date(Convert.ToInt32(aDate(2)), _
                                            Convert.ToInt32(aDate(1)), _
                                            Convert.ToInt32(aDate(0)))
        Else
          expProf.DataEntrada = Date.MinValue
        End If
        If Not txt_cal_data_saida.Text().Trim() = "" Then
          aDate = txt_cal_data_saida.Text.Split("/")
          expProf.DataSaida = New Date(Convert.ToInt32(aDate(2)), _
                                            Convert.ToInt32(aDate(1)), _
                                            Convert.ToInt32(aDate(0)))
        Else
          expProf.DataSaida = Date.MinValue
        End If
        objBECandidato.Curriculo.ExperienciasProfessionais.Add(expProf)

        ' Idiomas
        Dim idioma As Idioma
        If Not ddl_Alemao.SelectedIndex = NivelIdioma.Nenhum Then
          idioma = New Idioma()
          idioma.Id = 1
          idioma.Nivel = ddl_Alemao.SelectedIndex
          objBECandidato.Curriculo.Idiomas.Add(idioma)
        End If
        If Not ddl_Espanhol.SelectedIndex = NivelIdioma.Nenhum Then
          idioma = New Idioma()
          idioma.Id = 2
          idioma.Nivel = ddl_Espanhol.SelectedIndex
          objBECandidato.Curriculo.Idiomas.Add(idioma)
        End If
        If Not ddl_Frances.SelectedIndex = NivelIdioma.Nenhum Then
          idioma = New Idioma()
          idioma.Id = 3
          idioma.Nivel = ddl_Frances.SelectedIndex
          objBECandidato.Curriculo.Idiomas.Add(idioma)
        End If
        If Not ddl_Ingles.SelectedIndex = NivelIdioma.Nenhum Then
          idioma = New Idioma()
          idioma.Id = 4
          idioma.Nivel = ddl_Ingles.SelectedIndex
          objBECandidato.Curriculo.Idiomas.Add(idioma)
        End If
        If Not ddl_Italiano.SelectedIndex = NivelIdioma.Nenhum Then
          idioma = New Idioma()
          idioma.Id = 5
          idioma.Nivel = ddl_Italiano.SelectedIndex
          objBECandidato.Curriculo.Idiomas.Add(idioma)
        End If

        BCCandidato.Salvar(objBECandidato)

        lblErro.Text = "Dados do currículo gravados com Sucesso"
        lblErro.Visible = True

      End If
    Catch ex As Exception
      lblErro.Text = "Erro no cadastro do usuário<br/>" & ex.Message
      lblErro.Visible = True
      'System.Web.HttpContext.Current.Response.Write("<SCRIPT LANGUAGE=""JavaScript"">" & vbCrLf)
      'System.Web.HttpContext.Current.Response.Write("alert(""Erro na atualização do cadastro " & ex.Message & """)" & vbCrLf)
      'System.Web.HttpContext.Current.Response.Write("</SCRIPT>")
    End Try
  End Sub

  Protected Sub grvVagas_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles grvVagas.SelectedIndexChanged
    Session("ProvaId") = DirectCast(grvVagas.SelectedRow.FindControl("hd_ProvaId"), HiddenField).Value
    mostraApresentacaoProva()
  End Sub

  Protected Sub mostraApresentacaoProva()
    Dim objBECandidato As BECandidato = MontarBECandidato()
    Dim lstProvas As New List(Of BEProva)
    lstProvas.Add(BCProva.ResumoDaProva(objBECandidato.Id, Session("ProvaId")))
    dtvProva.DataSource = lstProvas
    dtvProva.DataBind()
    Dim objBEQuestao As BEQuestao = BCQuestao.Selecionar1aQuestaoPendente(objBECandidato)
    pnl_Curriculo.Visible = False
    pnl_Questao.Visible = False
    pnl_Apresentacao.Visible = True
    pnl_Prova.Visible = True
    pnl_Apresentacao.Visible = (objBEQuestao IsNot Nothing)
    pnl_SemQuestoes.Visible = (objBEQuestao Is Nothing)
  End Sub

  Protected Sub btnVoltarMaisTarde_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnVoltarMaisTarde.Click
    pnl_Curriculo.Visible = True
    pnl_Prova.Visible = False
    grvVagas.SelectedIndex = -1
  End Sub

  Protected Sub btnIniciarProva_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnIniciarProva.Click
    Dim objBECandidato As BECandidato = MontarBECandidato()
    Dim lstProvas As New List(Of BEProva)
    lstProvas.Add(BCProva.ResumoDaProva(objBECandidato.Id, Session("ProvaId")))
    dtvProva.DataSource = lstProvas
    dtvProva.DataBind()
    Dim objBEQuestao As BEQuestao = BCQuestao.Selecionar1aQuestaoPendente(objBECandidato)
    pnl_Apresentacao.Visible = False
    pnl_Questao.Visible = (objBEQuestao IsNot Nothing)
    If objBEQuestao Is Nothing Then
      pnl_SemQuestoes.Visible = True
    Else
      hd_TempoInicial.Value = Now().ToString("dd/MM/yyyy HH:mm")
      hd_QuestaoId.Value = objBEQuestao.Id
      hd_EhDissertativa.Value = objBEQuestao.EhDissertativa
      lbl_Ordem.Text = objBEQuestao.Ordem & ".&nbsp;"
      lbl_Enunciado.Text = Server.HtmlDecode(objBEQuestao.Enunciado)
      grvAlternativas.DataSource = objBEQuestao.Alternativas
      grvAlternativas.DataBind()
      grvAlternativas.Visible = Not objBEQuestao.EhDissertativa
      txt_Dissertativa.Text = ""
      txt_Dissertativa.Visible = objBEQuestao.EhDissertativa

      objBEQuestao.Alternativas = Nothing
      objBECandidato.VagasAssociadas(0).Prova.Questoes = New List(Of BEQuestao)
      objBECandidato.VagasAssociadas(0).Prova.Questoes.Add(objBEQuestao)
      BCQuestao.ResponderQuestao(objBECandidato)
      pnl_Questao.Visible = True
    End If
  End Sub

  Protected Sub btnResponderContinuarMaisTarde_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnResponderContinuarMaisTarde.Click
    If ResponderQuestao() Then btnVoltarMaisTarde_Click(Nothing, Nothing)
  End Sub

  Protected Sub btnResponder_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnResponder.Click
    If ResponderQuestao() Then btnIniciarProva_Click(Nothing, Nothing)
  End Sub

  Protected Function MontarBECandidato() As BECandidato
    Dim objBECandidato As New BECandidato(DirectCast(Session("objBEUsuario"), BECandidato).Id)
    objBECandidato.VagasAssociadas = New List(Of BEVaga)
    objBECandidato.VagasAssociadas.Add(New BEVaga(grvVagas.SelectedDataKey("Id")))
    objBECandidato.VagasAssociadas(0).Prova = New BEProva
    objBECandidato.VagasAssociadas(0).Prova.Id = Session("ProvaId")
    Return objBECandidato
  End Function

  Protected Function ResponderQuestao() As Boolean
    Dim booComErro As Boolean = True
    Try
      Dim objBECandidato As BECandidato = MontarBECandidato()
      objBECandidato.VagasAssociadas(0).Prova.Questoes = New List(Of BEQuestao)
      objBECandidato.VagasAssociadas(0).Prova.Questoes.Add(New BEQuestao(hd_QuestaoId.Value))
      objBECandidato.VagasAssociadas(0).Prova.Questoes(0).EhDissertativa = hd_EhDissertativa.Value
      If hd_EhDissertativa.Value Then
        lblErro.Text = "Precisa digitar uma resposta no espaço reservado."
        booComErro = (txt_Dissertativa.Text.Trim().Length() = 0)
        objBECandidato.VagasAssociadas(0).Prova.Questoes(0).RespostaDissertativa = txt_Dissertativa.Text
      Else
        lblErro.Text = "Selecione a resposta certa entre as alternativas mostradas"
        objBECandidato.VagasAssociadas(0).Prova.Questoes(0).Alternativas = New List(Of BEAlternativa)
        For intI As Integer = 0 To grvAlternativas.Rows.Count() - 1
          If DirectCast(grvAlternativas.Rows(intI).FindControl("rb_Alternativa"), RadioButton).Checked Then
            objBECandidato.VagasAssociadas(0).Prova.Questoes(0).Alternativas.Add(New BEAlternativa(grvAlternativas.DataKeys(intI)("Id")))
            booComErro = False
            Exit For
          End If
        Next
      End If
      lblErro.Visible = booComErro
      If Not booComErro Then
        objBECandidato.VagasAssociadas(0).Prova.Questoes(0).Tempo = Now() - Convert.ToDateTime(hd_TempoInicial.Value)
        BCQuestao.ResponderQuestao(objBECandidato)
      End If
      Return Not booComErro
    Catch ex As Exception
      Return False
    End Try
  End Function

  Protected Sub btnListaCurriculo_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnListaCurriculo.Click
    btnVoltarMaisTarde_Click(Nothing, Nothing)
  End Sub

End Class
